package com.matrix.framework.core.component;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * JWT密钥轮换定时任务
 *
 * Copyright © 海平面工作室 版权所有
 *
 * @Author: Leo
 * @Create: 2024/12/19 10:30
 * @Since 1.2
 */
@Component
public class JwtKeyRotationScheduler {

    private final JwtKeyManager keyManager;

    public JwtKeyRotationScheduler(JwtKeyManager keyManager) {
        this.keyManager = keyManager;
    }

    /**
     * 每天凌晨2点检查并轮换密钥
     * 使用cron表达式：秒 分 时 日 月 周
     */
    @Scheduled(cron = "0 0 2 * * ?")
    public void rotateKeyScheduled() {
        try {
            keyManager.rotateKey();
        } catch (Exception e) {
            // 记录错误日志，但不影响系统运行
            System.err.println("JWT密钥轮换失败: " + e.getMessage());
        }
    }

    /**
     * 每小时检查一次密钥状态（可选）
     */
    @Scheduled(fixedRate = 3600000) // 1小时 = 3600000毫秒
    public void checkKeyStatus() {
        try {
            // 这里可以添加密钥状态检查逻辑
            // 比如检查密钥是否即将过期，是否需要提前轮换等
            System.out.println("JWT密钥状态检查完成，当前活跃密钥ID: " + keyManager.getCurrentKeyId());
        } catch (Exception e) {
            System.err.println("JWT密钥状态检查失败: " + e.getMessage());
        }
    }
} 